#ifndef _CONFIG_H_
#define _CONFIG_H_
#include "JA_Protocol.h"
#include "Model_Info.h"
#define YEAR ((((__DATE__ [7] - '0') * 10 + (__DATE__ [8] - '0')) * 10 +(__DATE__ [9] - '0')) * 10 \
+ (__DATE__ [10] - '0'))  
  
#define MONTH (__DATE__ [2] == 'n' ? 0 \
    : __DATE__ [2] == 'b' ? 1 \
		: __DATE__ [2] == 'r' ? (__DATE__ [0] == 'M' ? 2 : 3) \
		: __DATE__ [2] == 'y' ? 4 \
		: __DATE__ [2] == 'n' ? 5 \
		: __DATE__ [2] == 'l' ? 6 \
    : __DATE__ [2] == 'g' ? 7 \
    : __DATE__ [2] == 'p' ? 8 \
    : __DATE__ [2] == 't' ? 9 \
    : __DATE__ [2] == 'v' ? 10 : 11)  
  
#define DAY ((__DATE__ [4] == ' ' ? 0 : __DATE__ [4] - '0') * 10 \
    + (__DATE__ [5] - '0'))

#define APP_VERSION_Major      1
#define App_VERSION_Minor      2
#define APP_VERSION_Revision   3
#define APP_VERSION_Build      0


typedef enum {
	ConfigCommand_SaveConfig=0x19,      //保存参数
	ConfigCommand_GetInfo=0x20,         //查询固化信息
	ConfigCommand_GetRFCONFIG=0x21,      //获取无线配置信息
	ConfigCommand_GetNetCONFIG=0x22,     //获取网络配置信息
	ConfigCommand_GetPortCONFIG=0x23,     //获取端口配置信息
	
	ConfigCommand_SetRFCONFIG=0x30,      //设置无线配置 
	ConfigCommand_SetNetCONFIG=0x31,     //设置网络配置
	ConfigCommand_SetPortCONFIG=0x32,    //设置端口配置
	
  ConfigCommand_SetInfo=0xF0,          //设置出厂参数
	
	IAP_Enter=0xA0,                     //进入IAP
}ConfigCommand;

/**************串口停止位长度****************/
typedef enum{
	ZY_UART_StopBits_1   = 0,    //1位停止位
  ZY_UART_StopBits_1_5 = 1,    //1.5位停止位
  ZY_UART_StopBits_2   = 2,    //2位停止位
  ZY_UART_StopBits_0_5 = 3,	   //0.5位停止位
}ZY_UART_STOPBITS;
/**************串口奇偶校验位****************/
typedef enum{
	ZY_UART_PARITY_NONE = 0,   //校验空
	ZY_UART_RARITY_EVEN = 1,   //偶校验
	ZY_UART_RARITY_ODD  = 2,   //奇校验
}ZY_UART_RARITY;

/**************串口奇偶校验位****************/
typedef enum{
	ZY_UART_DataBits_7BIT = 0,   //校验空
	ZY_UART_DataBits_8BIT = 1,   //偶校验
	ZY_UART_DataBits_9BIT = 2,   //奇校验
}ZY_UART_DATABITS;


/*********LoRa 带宽***********/
typedef enum{
	LoRa_SignalBw_7_8K=0,
	LoRa_SignalBw_10_4K=1,
	LoRa_SignalBw_15_6K=2,
	LoRa_SignalBw_20_8K=3,
	LoRa_SignalBw_31_2K=4,
	LoRa_SignalBw_41_6K=5,
	LoRa_SignalBw_62_5K=6,
	LoRa_SignalBw_125K=7,
	LoRa_SignalBw_250K=8,
	LoRa_SignalBw_500K=9,
}LoRa_SignalBw;


/*********LoRa 扩频因子***********/
typedef enum{
	LoRa_SpreadingFactor_64=6,
	LoRa_SpreadingFactor_128=7,
	LoRa_SpreadingFactor_256=8,
	LoRa_SpreadingFactor_512=9,
	LoRa_SpreadingFactor_1024=10,
	LoRa_SpreadingFactor_2048=11,
	LoRa_SpreadingFactor_4096=12
}LoRa_SpreadingFactor;

/*********编码器率***********/
typedef enum{
	LoRa_ErrorCoding_4_5=1,
	LoRa_ErrorCoding_4_6=2,
	LoRa_ErrorCoding_4_7=3,
	LoRa_ErrorCoding_4_8=4,
}LoRa_ErrorCoding;
/*********************************
* 版本信息结构体
*********************************/
typedef struct
{
	uint8_t  major;         //主版本号
	uint8_t  minor;         //子版本号
	uint8_t  revision;      //修正版本号
	uint8_t  build;         //编译版本号
}Version_Def_t;
/*****************************
 * 日期信息结构体
*****************************/
typedef struct 
{
	uint16_t year;          //年
	uint8_t  monty;         //月
	uint8_t  day;           //日
}Date_Def_t;

/***********模块信息查询*************/
typedef struct 
{
	GeneralConfigInfo_Def_t     solidify;              //固化信息
	Version_Def_t               software_version;      //软件版本
	Date_Def_t                  build_date;            //编译日期
	uint16_t                    dev_type;            //设备类型
}Command_info_t;

/**********无线参数配置参数************/
typedef struct
{
	Lora_RFConfig_t rf;
}Command_RF_INFO_t;
/*************Lora 网络参数******************/
typedef struct
{
	Lora_NetWorkConfig_t net_work;
}Command_NetWork_INFO_t;
/*********端口参数*******************/
typedef struct
{
	UartPortConfig_t rs232_port;
	UartPortConfig_t rs485_port;
}Command_PortInfo_t;
typedef struct
{
	uint32_t id;
}Command_SetInfo_t;
JA_BytesArray DTU_Config_Parse(JA_Protocol protocol, uint8_t *command_buf);

void Config_RxCallback(uint8_t *data, uint8_t Size);

UartPortConfig_t GetDefaultRS232Config(void);     //获取RS232 默认配置参数
UartPortConfig_t GetDefaultRS485Config(void);     //获取RS485 默认配置参数

Lora_RFConfig_t GetDefaultRFConfig(void);         //获取无线配置默认参数
Lora_NetWorkConfig_t GetDefaultNetWorkConfig(void);   //获取默认网络参数
void Init_Model(void);
#endif
